package com.syedu.day13;

import com.google.common.collect.Lists;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * description：java.util.ArrayList中的常用方法
 * @author Administrator
 * @date 2022/3/25 15:03
 */
public class ArrayListDemo2 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        /**1.添加方法*/
        //末尾添加元素
        list.add(10);
        list.add(30);
        list.add(20);
        list.add(10);//有序,可重复

        //在指定下标处添加
        list.add(1, 50);

        //一次性添加多个元素,参数一表示在哪个下标处添加元素,如果不给,则表示在末尾加
        list.addAll(List.of(1, 2, 3));

        /**2.清空集合元素*/
        //list.clear();

        /**3.判断集合中是否包含指定元素*/
        //boolean contains = list.contains(20);//一个
        boolean contains = list.containsAll(List.of(10, 20, 3));//同时多个
        System.out.println(contains);

        /**4.判断集合中指定元素首次/最后一次出现的下标,如果不存在则返回-1*/
        int indexOf = list.indexOf(10);
        int lastIndexOf = list.lastIndexOf(10);
        System.out.println(indexOf);
        System.out.println(lastIndexOf);

        /**5.判断集合是否为空*/
        boolean empty = list.isEmpty();
        System.out.println(empty);

        /**6.删除方法*/
        System.out.println(list);

        //a.根据下标删除集合元素,返回被删除的元素
        //Integer remove = list.remove(0);
        //System.out.println(remove);

        //b.根据元素删除集合元素,返回是否删除成功,注意: 此方法只能删除首次出现的元素
        //boolean remove = list.remove(Integer.valueOf(10));
        //System.out.println(remove);

        //c.删除集合中所有指定的元素,包括重复的
        boolean removeAll = list.removeAll(List.of(10, 50, 30));
        System.out.println(removeAll);

        //d.根据条件删除集合元素

        /**7. 获取集合元素个数*/
        int size = list.size();
        System.out.println(size);

        /**8.截取子集合,前闭后开*/
        List<Integer> integerList = list.subList(1, 3);
        System.out.println(integerList);

        /**集合的遍历,迭代*/
        //集合特有的迭代方式
        //1.JDK8.0 -- forEach
        //list.forEach(x -> System.out.println(x));
        list.forEach(System.out::println);

        //2.迭代器
        //a.获取集合迭代器
        Iterator<Integer> iterator = list.iterator();
        //b.循环迭代器
        while (iterator.hasNext()) {
            Integer next = iterator.next();
            System.out.println(next);
        }

        //3.直接打印
        //集合中已经重写了toString()方法,所以可以直接打印
        System.out.println(list);

        //4.普通for循环
        for (int i = 0; i < list.size(); i++) {
            //根据下标获取集合元素
            System.out.println(list.get(i));
        }

        //5.增强for循环
        for (Integer i : list) {
            System.out.println(i);
        }

        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");

        Car car1 = new Car("奔驰", "E300L", 400000.0);
        Car car2 = new Car("宝马", "320Li", 300000.0);
        Car car3 = new Car("奥迪", "Q7", 700000.0);
        Car car4 = new Car("比亚迪", "汉EV", 250000.0);
        Car car5 = new Car("凯迪拉克", "XT5", 350000.0);
        List<Car> cars = Lists.newArrayList(car1, car2, car3, car4, car5);
        /**根据条件删除集合元素*/
        boolean removeIf = cars.removeIf(car -> car.getPrice() > 300000.0);
        System.out.println(removeIf);
        cars.forEach(System.out::println);
    }
}